﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insifo.WE;
using System.Text.RegularExpressions;
using System.Collections.Specialized;

public partial class genImpuestoEditar : ObjectPage
{
    #region CONSTANTES

    private const string RUTA_LISTA = "~/Gen/genImpuestoListar.aspx";

    #endregion

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuEditarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {
            Cargar();
        }
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        //if (IsValid) { 
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Aceptar":
                Guardar("G");
                break;
            case "Aplicar":
                Guardar("A");
                break;
            case "Cancelar":
                Salir();
                break;
        }
        //}
    }

    protected void lvAplicacion_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
            CheckBox chkSeleccion = (CheckBox)e.Item.FindControl("chkSeleccion");
            chkSeleccion.Checked = Convert.ToBoolean(DataBinder.Eval(e.Item.DataItem, "Seleccion"));
            chkSeleccion.Enabled = !(Request.QueryString["a"] == "d");
            chkSeleccion.CssClass = "chkAplicacion";
        }
    }

    #endregion

    #region METODOS

    protected void Cargar()
    {
        string strAccion = Request.QueryString["a"];   //a: N-Nuevo, e-Editar, v-Ver
        string strId = Request.QueryString["i"];  //Id

        Util.loadCombo(ddlEstado, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");
        Util.loadComboAndItem(ddlPeriodicidad, ListarParametroDetalle(1, UsuarioSistema.IdAplicacion, Constantes.PARAMETRO_PERIODICIDAD), "Descripcion", "ParametroDetalle", "--" + Resources.resDiccionario.Seleccione + "--", "0");

        ActivarTabs(true);
        switch (strAccion)
        {
            case "n":
                Master.SubTitulo.Text = Resources.resDiccionario.Nuevo;
                Nuevo();
                break;
            case "e":
                Master.SubTitulo.Text = Resources.resDiccionario.Editar;
                Editar(strAccion, strId);
                break;
            case "d":
                Master.SubTitulo.Text = Resources.resDiccionario.Inactivar;
                Editar(strAccion, strId);
                break;
            default:
                Master.SubTitulo.Text = Resources.resDiccionario.Unknow;
                break;
        }

        ListarAplicaciones();
    }

    protected void Nuevo()
    {
        hfIdImpuesto.Value = "0";
        hfAccion.Value = "n"; //Nuevo
        txtCodigo.Text = string.Empty;
        txtDescripcion.Text = string.Empty;

        //Datos de Auditoria
        ddlEstado.SelectedIndex = 0; //Representa el primero
        txtUsuarioCreacion.Text = string.Empty;
        txtFechaCreacion.Text = string.Empty;
        txtUsuarioModificacion.Text = string.Empty;
        txtFechaModificacion.Text = string.Empty;
    }

    protected void Editar(string pstrAccion, string pstrId)
    {

        WCImpuesto.BEImpuesto be = new WCImpuesto.BEImpuesto 
        {
            IdImpuesto = Int32.Parse(pstrId)
        };
        be = Obtener(be);

        hfIdImpuesto.Value = pstrId;
        hfAccion.Value = pstrAccion;
        txtCodigo.Text = be.CodigoImpuesto;
        txtDescripcion.Text = be.Descripcion;
        ddlPeriodicidad.SelectedValue = be.Periodicidad;
        txtTasa.Text = be.Tasa.ToString("N2");
        


        //Datos de Auditoria
        Util.SelectCombo(ddlEstado, be.Estado);
        txtUsuarioCreacion.Text = be.UsuarioCreacion;
        txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
        txtUsuarioModificacion.Text = be.UsuarioModificacion;
        txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

        if (pstrAccion == "d")
        {
            Master.MenuAplicar.Visible = false; //Remueve el boton aplicar
            txtCodigo.Enabled = false;
            txtDescripcion.Enabled = false;
            ddlEstado.Enabled = false;

            if (be.Estado == Constantes.ESTADO_ACTIVO)
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_INACTIVO);
            else
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_ACTIVO);
        }
    }

    protected bool Validar(out WCImpuesto.BEImpuesto pbe)
    {
        pbe = new WCImpuesto.BEImpuesto();
        string strCodigoUnidadMedida = string.Empty, strDescripcion = string.Empty;
        string strEstado = string.Empty;
        string strAccion = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver

        strCodigoUnidadMedida = txtCodigo.Text.Trim();
        strDescripcion = txtDescripcion.Text.Trim();
        strEstado = ddlEstado.SelectedValue;

        //Inicializa
        WCImpuesto.BEImpuesto be = new WCImpuesto.BEImpuesto
        {
            IdImpuesto = Int32.Parse(hfIdImpuesto.Value),
            CodigoImpuesto = strCodigoUnidadMedida,
            Descripcion = strDescripcion,

            Periodicidad = ddlPeriodicidad.SelectedValue,
            Tasa = decimal.Parse(txtTasa.Text.Equals("") ? "0" : txtTasa.Text),

            Estado = strEstado,
            UsuarioCreacion = UsuarioSistema.CodigoUsuario,
            FechaCreacion = DateTime.Now,
            UsuarioModificacion = UsuarioSistema.CodigoUsuario,
            FechaModificacion = DateTime.Now
        };

        CheckBox chkSeleccion = null;  
        
        List<WCImpuesto.BEImpuestoAplicacion> lstAplicacion = new List<WCImpuesto.BEImpuestoAplicacion>();
        WCImpuesto.BEImpuestoAplicacion beAplicacion = null;
        for (int i = 0; i < lvAplicacion.Items.Count; i++)
        {
            chkSeleccion = (CheckBox)lvAplicacion.Items[i].FindControl("chkSeleccion");
            if (Convert.ToBoolean(lvAplicacion.DataKeys[i]["Seleccion"]) != chkSeleccion.Checked)
            {
                beAplicacion = new WCImpuesto.BEImpuestoAplicacion();
                beAplicacion.IdImpuesto = be.IdImpuesto;
                beAplicacion.IdAplicacion = int.Parse(lvAplicacion.DataKeys[i].Value.ToString());
                beAplicacion.Estado = chkSeleccion.Checked ? Constantes.ESTADO_ACTIVO : Constantes.ESTADO_INACTIVO;
                beAplicacion.UsuarioCreacion = UsuarioSistema.CodigoUsuario;
                lstAplicacion.Add(beAplicacion);
            }
        }

        be.Aplicaciones = lstAplicacion.ToArray();
        pbe = be;
        return true;
    }

    protected void Guardar(string pstrEvento) //G:Grabar, A:Aplicar
    {
        string strAccion = string.Empty;
        string strUsuario = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver
        strUsuario = UsuarioSistema.CodigoUsuario;

        WCImpuesto.BEImpuesto be;

        if (!Validar(out be)) //Valida e Inicializa
        {
            return;
        }

        //Grabar
        switch (strAccion)
        {
            case "n": //Nuevo
                be = Insertar(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorRegistrar));
                }
                hfAccion.Value = "e";
                hfIdImpuesto.Value = be.IdImpuesto.ToString();
                txtCodigo.Text = be.CodigoImpuesto;

                txtUsuarioCreacion.Text = strUsuario;
                txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                break;
            case "e": //Actualiza
                be = Actualizar(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorActualizar));
                }
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

                break;
            case "d": //Elimina
                be = Eliminar(be);
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorActualizar));
                }
                break;
        }
        if (pstrEvento == "G") //Si es GRABAR redirecciona a la Lista
        {
            if (be.Error == 0)
                Salir();
        }
    }

    protected void Salir()
    {
        string FiltroParam = Request.QueryString["f"];
        Util.Redireciona(RUTA_LISTA, "?a=l&f=" + FiltroParam, true);
    }

    protected void ActivarTabs(bool blnActivar)
    {
        lnkImpuesto.HRef = blnActivar ? string.Format("#{0}", tabPrincipal.ClientID) : string.Empty;
        lnkAplicacion.Attributes["href"] = blnActivar ? string.Format("#{0}", tabAplicacion.ClientID) : string.Empty;

        liImpuesto.Visible = blnActivar;
        liAplicacion.Visible = blnActivar;

        tabPrincipal.Visible = blnActivar;
        tabAplicacion.Visible = blnActivar;
    }

    protected void ListarAplicaciones()
    {
        int intIdUnidadMedida = 0;
        if (!string.IsNullOrEmpty(hfIdImpuesto.Value))
            intIdUnidadMedida = int.Parse(hfIdImpuesto.Value);
        //Filtrar
        DataTable dt = ListarAplicaciones(intIdUnidadMedida);
        lvAplicacion.DataSource = dt;
        lvAplicacion.DataBind();
    }

    #endregion

    #region LLAMDAS A WEBSERVICES

    protected WCImpuesto.BEImpuesto Insertar(WCImpuesto.BEImpuesto pbe)
    {
        WCImpuesto.BEImpuesto be = new WCImpuesto.BEImpuesto();
         
        using (var client = new ServiceClient<WCImpuesto.IWCImpuesto>("BasicHttpBinding_IWCImpuesto"))
        {
            be = client.ServiceOperation<WCImpuesto.BEImpuesto>(c => c.Insertar(pbe) );
                
        }
        return be;
    }

    protected WCImpuesto.BEImpuesto Obtener(WCImpuesto.BEImpuesto pbe)
    {
        WCImpuesto.BEImpuesto be = new WCImpuesto.BEImpuesto();
        
        using (var client = new ServiceClient<WCImpuesto.IWCImpuesto>("BasicHttpBinding_IWCImpuesto"))
        {
            be = client.ServiceOperation<WCImpuesto.BEImpuesto>(c => c.Obtener(pbe) );
             
        }
        return be;
    }

    protected WCImpuesto.BEImpuesto Actualizar(WCImpuesto.BEImpuesto pbe)
    {
        WCImpuesto.BEImpuesto be = new WCImpuesto.BEImpuesto();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCImpuesto.IWCImpuesto>("BasicHttpBinding_IWCImpuesto"))
        {
            be = client.ServiceOperation<WCImpuesto.BEImpuesto>(c => c.Actualizar(pbe));
          
        }
        return be;
    }

    protected WCImpuesto.BEImpuesto Eliminar(WCImpuesto.BEImpuesto pbe)
    {
        WCImpuesto.BEImpuesto be = new WCImpuesto.BEImpuesto();
        
        using (var client = new ServiceClient<WCImpuesto.IWCImpuesto>("BasicHttpBinding_IWCImpuesto"))
        {
            be = client.ServiceOperation<WCImpuesto.BEImpuesto>( c => c.Eliminar(pbe));
             
        }
        return be;
    }

    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    protected DataTable ListarAplicaciones(int pintId)
    {
        
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCImpuesto.IWCImpuesto>("BasicHttpBinding_IWCImpuesto"))
        {
            dt = client.ServiceOperation<DataTable>(c => c.ListarAplicacion(pintId).Tables[0] );
               
              
            
            
        }
        return dt;
    }
    #endregion
}